A traditional call center enables telephone calls, from users requiring service, to be routed to agents capable of providing the required service. For example, a person who placed a call to inquire about a company's product may have their call routed to a call center, so that the call center may direct their call to the first available company representative who can handle their inquiry.
As the popularity of the World Wide Web (Web) has grown, the number of ways in which customers interact with company's representatives has also increased. For example, many customers may access a company's web page to request that a company representative call them back, to send an email to a company representative, or to initiate a live chat session with a company representative. Thus, it is desirable for call centers to process not only telephone calls, but other types of communication as well.
One approach for implementing a call center involves the use of a single server that maintains a queue in volatile memory. The server stores communication requests from users in the queue, and removes communication requests from the queue whenever a company representative requests a communication request from the queue. Unfortunately, this approach has an upper bound on the number of communication requests that may be simultaneously processed by the server, as the volatile memory of the server may only store information about a certain number of communication requests at the same time. Further, if the server crashes, then all information in the queue is lost, as the queue is maintained only in volatile memory.
In another approach, multiple servers may be employed. Each server maintains a queue of communication requests. However, the functional component that determines which communication request should be processed by an available agent must inspect items in each queue at each server, thereby requiring a distributed locking scheme. The distributed locking scheme results in a high overhead in accessing each queue in each server, and due to its complexity, is susceptible to programming errors (or “bugs”).
Consequently, an approach for performing queuing and distribution functionality for a call center that does not incur the problems associated with the above approaches is desirable. The approaches described in this section are approaches that could be pursued, but not necessarily approaches that have been previously conceived or pursued. Therefore, unless otherwise indicated, it should not be assumed that any of the approaches described in this section qualify as prior art merely by virtue of their inclusion in this section.